<!DOCTYPE html>
<!-- saved from url=(0048)https://docs.jeequan.com/docs/jeepay/dev_channel -->
<html lang="zh-CN" class=" " style=""><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

    <title>通道对接 - Powered by MinDoc</title>

    
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <meta name="renderer" content="webkit">
    <meta name="author" content="Minho">
    <meta name="keywords" content="jeepay文档,xxpay文档,支付系统文档,开源聚合支付系统文档,Jeepay文档,功能开发">
    <meta name="description" content="功能开发-介绍jeepay计全支付系统使用,二次开发部署文档.">

    
    <link href="./通道对接 - Powered by MinDoc_files/bootstrap.min.css" rel="stylesheet">

    <link href="./通道对接 - Powered by MinDoc_files/style.min.css" rel="stylesheet">
    <link href="./通道对接 - Powered by MinDoc_files/font-awesome.min.css" rel="stylesheet">
    <link href="./通道对接 - Powered by MinDoc_files/nprogress.css" rel="stylesheet">
    <link href="./通道对接 - Powered by MinDoc_files/kancloud.css" rel="stylesheet">
    <link href="./通道对接 - Powered by MinDoc_files/jstree.css" rel="stylesheet">
    <link href="./通道对接 - Powered by MinDoc_files/mermaid.css" rel="stylesheet">
    <link href="./通道对接 - Powered by MinDoc_files/sequence-diagram-min.css" rel="stylesheet">
    <link href="./通道对接 - Powered by MinDoc_files/editormd.preview.css" rel="stylesheet">
    <link href="./通道对接 - Powered by MinDoc_files/markdown.preview.css" rel="stylesheet">
    <link href="./通道对接 - Powered by MinDoc_files/github.css" rel="stylesheet">
    <link href="./通道对接 - Powered by MinDoc_files/katex.min.css" rel="stylesheet">
    <link href="./通道对接 - Powered by MinDoc_files/print.css" media="print" rel="stylesheet">

    <script type="text/javascript">window.book={"identify":"jeepay"};</script>
<link rel="stylesheet" href="./通道对接 - Powered by MinDoc_files/layer.css" id="layuicss-skinlayercss"></head>
<body>
<div class="m-manual manual-mode-view manual-reader">
    <header class="navbar navbar-static-top manual-head" role="banner">
        <div class="container-fluid">
            <div class="navbar-header pull-left manual-title">
                <span class="slidebar" id="slidebar"><i class="fa fa-align-justify"></i></span>
                <a href="https://docs.jeequan.com/docs/jeepay" title="Jeepay文档" class="book-title">Jeepay文档</a>
                <span style="font-size: 12px;font-weight: 100;"></span>
            </div>
            <div class="navbar-header pull-right manual-menu">
                <a href="javascript:window.print();" id="printSinglePage" class="btn btn-default" style="margin-right: 10px;"><i class="fa fa-print"></i> 打印</a>
                
                <div class="dropdown pull-right" style="margin-right: 10px;">
                    <a href="https://docs.jeequan.com/" class="btn btn-default"><i class="fa fa-home" aria-hidden="true"></i> 首页</a>
                </div>
                <div class="dropdown pull-right" style="margin-right: 10px;">
                
                
                
                </div>
                
            </div>
        </div>
    </header>
    <article class="container-fluid manual-body">
        <div class="manual-left">
            <div class="manual-tab">
                <div class="tab-navg">
                    <span data-mode="view" class="navg-item active"><i class="fa fa-align-justify"></i><b class="text">目录</b></span>
                    <span data-mode="search" class="navg-item"><i class="fa fa-search"></i><b class="text">搜索</b></span>
                </div>
                <div class="tab-util">
                    <span class="manual-fullscreen-switch">
                        <b class="open fa fa-angle-right" title="展开"></b>
                        <b class="close fa fa-angle-left" title="关闭"></b>
                    </span>
                </div>
                <div class="tab-wrap">
                    <div class="tab-item manual-catalog">
                        <div class="catalog-list read-book-preview jstree jstree-1 jstree-default" id="sidebar" role="tree" tabindex="0" aria-activedescendant="12" aria-busy="false"><ul class="jstree-container-ul jstree-children jstree-wholerow-ul jstree-no-dots" role="group"><li role="treeitem" aria-selected="false" aria-level="1" aria-labelledby="3_anchor" id="3" class="jstree-node  jstree-leaf"><div unselectable="on" role="presentation" class="jstree-wholerow">&nbsp;</div><i class="jstree-icon jstree-ocl" role="presentation"></i><a class="jstree-anchor" href="https://docs.jeequan.com/docs/jeepay/index" tabindex="-1" title="Jeepay" data-version="1636477516" id="3_anchor"><i class="jstree-icon jstree-themeicon jstree-themeicon-hidden" role="presentation"></i>Jeepay</a></li><li role="treeitem" aria-selected="false" aria-level="1" aria-labelledby="4_anchor" aria-expanded="true" id="4" class="jstree-node  jstree-open"><div unselectable="on" role="presentation" class="jstree-wholerow">&nbsp;</div><i class="jstree-icon jstree-ocl" role="presentation"></i><a class="jstree-anchor" href="https://docs.jeequan.com/docs/jeepay/introduction" tabindex="-1" title="系统介绍" data-version="1624871984" id="4_anchor"><i class="jstree-icon jstree-themeicon jstree-themeicon-hidden" role="presentation"></i>系统介绍</a><ul role="group" class="jstree-children"><li role="treeitem" aria-selected="false" aria-level="2" aria-labelledby="5_anchor" id="5" class="jstree-node  jstree-leaf"><div unselectable="on" role="presentation" class="jstree-wholerow">&nbsp;</div><i class="jstree-icon jstree-ocl" role="presentation"></i><a class="jstree-anchor" href="https://docs.jeequan.com/docs/jeepay/framework" tabindex="-1" title="系统架构" data-version="1715132862" id="5_anchor"><i class="jstree-icon jstree-themeicon jstree-themeicon-hidden" role="presentation"></i>系统架构</a></li><li role="treeitem" aria-selected="false" aria-level="2" aria-labelledby="6_anchor" id="6" class="jstree-node  jstree-leaf jstree-last"><div unselectable="on" role="presentation" class="jstree-wholerow">&nbsp;</div><i class="jstree-icon jstree-ocl" role="presentation"></i><a class="jstree-anchor" href="https://docs.jeequan.com/docs/jeepay/function" tabindex="-1" title="功能列表" data-version="1624872022" id="6_anchor"><i class="jstree-icon jstree-themeicon jstree-themeicon-hidden" role="presentation"></i>功能列表</a></li></ul></li><li role="treeitem" aria-selected="false" aria-level="1" aria-labelledby="7_anchor" aria-expanded="true" id="7" class="jstree-node  jstree-open"><div unselectable="on" role="presentation" class="jstree-wholerow">&nbsp;</div><i class="jstree-icon jstree-ocl" role="presentation"></i><a class="jstree-anchor" href="https://docs.jeequan.com/docs/jeepay/develop" tabindex="-1" title="开发部署" data-version="1624872040" id="7_anchor"><i class="jstree-icon jstree-themeicon jstree-themeicon-hidden" role="presentation"></i>开发部署</a><ul role="group" class="jstree-children"><li role="treeitem" aria-selected="false" aria-level="2" aria-labelledby="10_anchor" id="10" class="jstree-node  jstree-leaf"><div unselectable="on" role="presentation" class="jstree-wholerow">&nbsp;</div><i class="jstree-icon jstree-ocl" role="presentation"></i><a class="jstree-anchor" href="https://docs.jeequan.com/docs/jeepay/dev_serv" tabindex="-1" title="功能开发" data-version="1624872069" id="10_anchor"><i class="jstree-icon jstree-themeicon jstree-themeicon-hidden" role="presentation"></i>功能开发</a></li><li role="treeitem" aria-selected="true" aria-level="2" aria-labelledby="11_anchor" id="11" class="jstree-node  jstree-leaf"><div unselectable="on" role="presentation" class="jstree-wholerow jstree-wholerow-clicked">&nbsp;</div><i class="jstree-icon jstree-ocl" role="presentation"></i><a class="jstree-anchor jstree-clicked" href="https://docs.jeequan.com/docs/jeepay/dev_channel" tabindex="-1" title="通道对接" data-version="1636345825" id="11_anchor"><i class="jstree-icon jstree-themeicon jstree-themeicon-hidden" role="presentation"></i>通道对接</a></li><li role="treeitem" aria-selected="false" aria-level="2" aria-labelledby="12_anchor" id="12" class="jstree-node  jstree-leaf"><div unselectable="on" role="presentation" class="jstree-wholerow jstree-wholerow-hovered">&nbsp;</div><i class="jstree-icon jstree-ocl" role="presentation"></i><a class="jstree-anchor jstree-hovered" href="https://docs.jeequan.com/docs/jeepay/ui" tabindex="-1" title="UI规范" data-version="1624872087" id="12_anchor"><i class="jstree-icon jstree-themeicon jstree-themeicon-hidden" role="presentation"></i>UI规范</a></li><li role="treeitem" aria-selected="false" aria-level="2" aria-labelledby="13_anchor" id="13" class="jstree-node  jstree-leaf"><div unselectable="on" role="presentation" class="jstree-wholerow">&nbsp;</div><i class="jstree-icon jstree-ocl" role="presentation"></i><a class="jstree-anchor" href="https://docs.jeequan.com/docs/jeepay/deploy" tabindex="-1" title="部署运行" data-version="1718189984" id="13_anchor"><i class="jstree-icon jstree-themeicon jstree-themeicon-hidden" role="presentation"></i>部署运行</a></li><li role="treeitem" aria-selected="false" aria-level="2" aria-labelledby="75_anchor" id="75" class="jstree-node  jstree-leaf"><div unselectable="on" role="presentation" class="jstree-wholerow">&nbsp;</div><i class="jstree-icon jstree-ocl" role="presentation"></i><a class="jstree-anchor" href="https://docs.jeequan.com/docs/jeepay/jeepay-1d99ciatu11h5" tabindex="-1" title="常见问题" data-version="1703915761" id="75_anchor"><i class="jstree-icon jstree-themeicon jstree-themeicon-hidden" role="presentation"></i>常见问题</a></li><li role="treeitem" aria-selected="false" aria-level="2" aria-labelledby="82_anchor" id="82" class="jstree-node  jstree-leaf"><div unselectable="on" role="presentation" class="jstree-wholerow">&nbsp;</div><i class="jstree-icon jstree-ocl" role="presentation"></i><a class="jstree-anchor" href="https://docs.jeequan.com/docs/jeepay/jeepay-1dbdn8bqgo270" tabindex="-1" title="系统使用" data-version="1666439979" id="82_anchor"><i class="jstree-icon jstree-themeicon jstree-themeicon-hidden" role="presentation"></i>系统使用</a></li><li role="treeitem" aria-selected="false" aria-level="2" aria-labelledby="625_anchor" id="625" class="jstree-node  jstree-leaf"><div unselectable="on" role="presentation" class="jstree-wholerow">&nbsp;</div><i class="jstree-icon jstree-ocl" role="presentation"></i><a class="jstree-anchor" href="https://docs.jeequan.com/docs/jeepay/jeepay-1dtoth2rhr9sj" tabindex="-1" title="支付宝沙箱教程" data-version="1654824191" id="625_anchor"><i class="jstree-icon jstree-themeicon jstree-themeicon-hidden" role="presentation"></i>支付宝沙箱教程</a></li><li role="treeitem" aria-selected="false" aria-level="2" aria-labelledby="634_anchor" id="634" class="jstree-node  jstree-leaf jstree-last"><div unselectable="on" role="presentation" class="jstree-wholerow">&nbsp;</div><i class="jstree-icon jstree-ocl" role="presentation"></i><a class="jstree-anchor" href="https://docs.jeequan.com/docs/jeepay/jeepay-1dvukp7mpq96q" tabindex="-1" title="Docker部署" data-version="1657277771" id="634_anchor"><i class="jstree-icon jstree-themeicon jstree-themeicon-hidden" role="presentation"></i>Docker部署</a></li></ul></li><li role="treeitem" aria-selected="false" aria-level="1" aria-labelledby="669_anchor" aria-expanded="true" id="669" class="jstree-node  jstree-open"><div unselectable="on" role="presentation" class="jstree-wholerow">&nbsp;</div><i class="jstree-icon jstree-ocl" role="presentation"></i><a class="jstree-anchor" href="https://docs.jeequan.com/docs/jeepay/ifstore" tabindex="-1" title="接口市场" data-version="1679201383" id="669_anchor"><i class="jstree-icon jstree-themeicon jstree-themeicon-hidden" role="presentation"></i>接口市场</a><ul role="group" class="jstree-children"><li role="treeitem" aria-selected="false" aria-level="2" aria-labelledby="672_anchor" id="672" class="jstree-node  jstree-leaf jstree-last"><div unselectable="on" role="presentation" class="jstree-wholerow">&nbsp;</div><i class="jstree-icon jstree-ocl" role="presentation"></i><a class="jstree-anchor" href="https://docs.jeequan.com/docs/jeepay/jeepay-1ejdnsuhveb16" tabindex="-1" title="支付接口安装" data-version="1679215111" id="672_anchor"><i class="jstree-icon jstree-themeicon jstree-themeicon-hidden" role="presentation"></i>支付接口安装</a></li></ul></li><li role="treeitem" aria-selected="false" aria-level="1" aria-labelledby="8_anchor" aria-expanded="true" id="8" class="jstree-node  jstree-open"><div unselectable="on" role="presentation" class="jstree-wholerow">&nbsp;</div><i class="jstree-icon jstree-ocl" role="presentation"></i><a class="jstree-anchor" href="https://docs.jeequan.com/docs/jeepay/interface" tabindex="-1" title="接口文档" data-version="1624872115" id="8_anchor"><i class="jstree-icon jstree-themeicon jstree-themeicon-hidden" role="presentation"></i>接口文档</a><ul role="group" class="jstree-children"><li role="treeitem" aria-selected="false" aria-level="2" aria-labelledby="14_anchor" id="14" class="jstree-node  jstree-leaf"><div unselectable="on" role="presentation" class="jstree-wholerow">&nbsp;</div><i class="jstree-icon jstree-ocl" role="presentation"></i><a class="jstree-anchor" href="https://docs.jeequan.com/docs/jeepay/api_rule" tabindex="-1" title="接口规则" data-version="1681101577" id="14_anchor"><i class="jstree-icon jstree-themeicon jstree-themeicon-hidden" role="presentation"></i>接口规则</a></li><li role="treeitem" aria-selected="false" aria-level="2" aria-labelledby="15_anchor" id="15" class="jstree-node  jstree-leaf"><div unselectable="on" role="presentation" class="jstree-wholerow">&nbsp;</div><i class="jstree-icon jstree-ocl" role="presentation"></i><a class="jstree-anchor" href="https://docs.jeequan.com/docs/jeepay/payment_api" tabindex="-1" title="支付接口" data-version="1704857925" id="15_anchor"><i class="jstree-icon jstree-themeicon jstree-themeicon-hidden" role="presentation"></i>支付接口</a></li><li role="treeitem" aria-selected="false" aria-level="2" aria-labelledby="16_anchor" id="16" class="jstree-node  jstree-leaf"><div unselectable="on" role="presentation" class="jstree-wholerow">&nbsp;</div><i class="jstree-icon jstree-ocl" role="presentation"></i><a class="jstree-anchor" href="https://docs.jeequan.com/docs/jeepay/refund_api" tabindex="-1" title="退款接口" data-version="1624872147" id="16_anchor"><i class="jstree-icon jstree-themeicon jstree-themeicon-hidden" role="presentation"></i>退款接口</a></li><li role="treeitem" aria-selected="false" aria-level="2" aria-labelledby="65_anchor" id="65" class="jstree-node  jstree-leaf"><div unselectable="on" role="presentation" class="jstree-wholerow">&nbsp;</div><i class="jstree-icon jstree-ocl" role="presentation"></i><a class="jstree-anchor" href="https://docs.jeequan.com/docs/jeepay/transfer_api" tabindex="-1" title="转账接口" data-version="1629107892" id="65_anchor"><i class="jstree-icon jstree-themeicon jstree-themeicon-hidden" role="presentation"></i>转账接口</a></li><li role="treeitem" aria-selected="false" aria-level="2" aria-labelledby="69_anchor" id="69" class="jstree-node  jstree-leaf jstree-last"><div unselectable="on" role="presentation" class="jstree-wholerow">&nbsp;</div><i class="jstree-icon jstree-ocl" role="presentation"></i><a class="jstree-anchor" href="https://docs.jeequan.com/docs/jeepay/division_api" tabindex="-1" title="分账接口" data-version="1651010086" id="69_anchor"><i class="jstree-icon jstree-themeicon jstree-themeicon-hidden" role="presentation"></i>分账接口</a></li></ul></li><li role="treeitem" aria-selected="false" aria-level="1" aria-labelledby="465_anchor" id="465" class="jstree-node  jstree-leaf"><div unselectable="on" role="presentation" class="jstree-wholerow">&nbsp;</div><i class="jstree-icon jstree-ocl" role="presentation"></i><a class="jstree-anchor" href="https://docs.jeequan.com/docs/jeepay/jeepay-1dg3r7b2remns" tabindex="-1" title="SDK下载" data-version="1678379723" id="465_anchor"><i class="jstree-icon jstree-themeicon jstree-themeicon-hidden" role="presentation"></i>SDK下载</a></li><li role="treeitem" aria-selected="false" aria-level="1" aria-labelledby="9_anchor" id="9" class="jstree-node  jstree-leaf jstree-last"><div unselectable="on" role="presentation" class="jstree-wholerow">&nbsp;</div><i class="jstree-icon jstree-ocl" role="presentation"></i><a class="jstree-anchor" href="https://docs.jeequan.com/docs/jeepay/contact" tabindex="-1" title="联系我们" data-version="1698809527" id="9_anchor"><i class="jstree-icon jstree-themeicon jstree-themeicon-hidden" role="presentation"></i>联系我们</a></li></ul></div>

                    </div>
                    <div class="tab-item manual-search">
                        <div class="search-container">
                            <div class="search-form">
                                <form id="searchForm" action="https://docs.jeequan.com/docs/jeepay/search" method="post">
                                    <div class="form-group">
                                        <input type="search" placeholder="请输入搜索关键字" class="form-control" name="keyword">
                                        <button type="submit" class="btn btn-default btn-search" id="btnSearch">
                                            <i class="fa fa-search"></i>
                                        </button>
                                    </div>
                                </form>
                            </div>
                            <div class="search-result">
                                <div class="search-empty">
                                    <i class="fa fa-search-plus" aria-hidden="true"></i>
                                    <b class="text">暂无相关搜索结果！</b>
                                </div>
                                <ul class="search-list" id="searchList">
                                </ul>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
            <div class="m-copyright">
                <p>
                    本文档由 <a href="https://www.jeequan.com/" target="_blank">计全科技</a> 发布
                </p>
            </div>
        </div>
        <div class="manual-right">
            <div class="manual-article">
                
                <div class="article-content">
                    <div class="article-body  markdown-body editormd-preview-container" id="page-content"><article class="markdown-article-inner"><div class="markdown-toc editormd-markdown-toc" style="height: 866px;"><ul class="markdown-toc-list"><li class="directory-item"><a class="directory-item-link directory-item-link-2" href="https://docs.jeequan.com/docs/jeepay/dev_channel#as5xsk" level="2">一、 接口准备工作：</a></li><li class="directory-item"><a class="directory-item-link directory-item-link-3" href="https://docs.jeequan.com/docs/jeepay/dev_channel#8jdo9h" level="3">1.1 &gt; 接口起名：</a></li><li class="directory-item"><a class="directory-item-link directory-item-link-3" href="https://docs.jeequan.com/docs/jeepay/dev_channel#fv8oeb" level="3">1.2 &gt; 准备三方支付接口：</a></li><li class="directory-item"><a class="directory-item-link directory-item-link-3" href="https://docs.jeequan.com/docs/jeepay/dev_channel#git7kg" level="3">1.3 &gt; 支付方式初始化：</a></li><li class="directory-item"><a class="directory-item-link directory-item-link-3" href="https://docs.jeequan.com/docs/jeepay/dev_channel#9lj15j" level="3">1.4 &gt; 支付接口初始化：</a></li><li class="directory-item"><a class="directory-item-link directory-item-link-2" href="https://docs.jeequan.com/docs/jeepay/dev_channel#clcq1g" level="2">二、 接口编码：</a></li><li class="directory-item"><a class="directory-item-link directory-item-link-3" href="https://docs.jeequan.com/docs/jeepay/dev_channel#9uzume" level="3">2.1 &gt; 添加支付接口常量：</a></li><li class="directory-item"><a class="directory-item-link directory-item-link-3" href="https://docs.jeequan.com/docs/jeepay/dev_channel#74lzg1" level="3">2.2 &gt; 添加支付接口参数配置model：</a></li><li class="directory-item"><a class="directory-item-link directory-item-link-3" href="https://docs.jeequan.com/docs/jeepay/dev_channel#gia6pl" level="3">2.3 &gt; 添加支付方式的RQ和RS (如果有)</a></li><li class="directory-item"><a class="directory-item-link directory-item-link-3" href="https://docs.jeequan.com/docs/jeepay/dev_channel#cled8u" level="3">2.4 &gt; 通道的对接工作</a></li><li class="directory-item"><a class="directory-item-link directory-item-link-4" href="https://docs.jeequan.com/docs/jeepay/dev_channel#16zirm" level="4">a. 支付接口类：</a></li><li class="directory-item"><a class="directory-item-link directory-item-link-4" href="https://docs.jeequan.com/docs/jeepay/dev_channel#caoq5m" level="4">b. 回调接口类：</a></li><li class="directory-item"><a class="directory-item-link directory-item-link-4" href="https://docs.jeequan.com/docs/jeepay/dev_channel#10p3ou" level="4">c. 查单类：</a></li></ul></div><div class="markdown-article"><blockquote class="default">
<p class="line"><code>jeepay支付系统开源版</code> 已完成了如下接口的对接工作：</p>
</blockquote><ul>
<li><p class="line">支付宝官方普通商户模式/ isv模式 （RSA / RSA2加密 / 证书加密）</p>
</li><li><p class="line">微信官方普通商户/服务商模式 （V2 / V3接口）</p>
</li><li><p class="line">云闪付开放平台服务商模式</p>
</li></ul><blockquote class="default">
<p class="line">若您有更多的三方/银行接口 需要对接联调请参考以下文档进行二次开发，也可以联系官方技术收费开发（QQ：<code>13527422</code>）。</p>
</blockquote><h2 id="as5xsk" class="markdown-heading"><a name="as5xsk" class="reference-link"></a><span class="header-link octicon octicon-link"></span>一、 接口准备工作：</h2><h3 id="8jdo9h" class="markdown-heading"><a name="8jdo9h" class="reference-link"></a><span class="header-link octicon octicon-link"></span>1.1 &gt; 接口起名：</h3><p class="line">按照jeepay项目的约定： 所有支付接口需全部小写，并且以<code>pay</code>结尾， 例如 <code>alipay</code>, <code>wxpay</code>, <code>ysfpay</code></p><p class="line">比方我们待对接的通道为工行支付，起名 <code>icbcpay</code>， 以下文档按照<code>icbcpay</code>进行说明。</p><h3 id="fv8oeb" class="markdown-heading"><a name="fv8oeb" class="reference-link"></a><span class="header-link octicon octicon-link"></span>1.2 &gt; 准备三方支付接口：</h3><ol>
<li><p class="line">支付下单接口；</p>
</li><li><p class="line">回调通知接口；</p>
</li><li><p class="line">订单查询接口；</p>
</li><li><p class="line">获取三方用户ID(非必须)</p>
</li></ol><h3 id="git7kg" class="markdown-heading"><a name="git7kg" class="reference-link"></a><span class="header-link octicon octicon-link"></span>1.3 &gt; 支付方式初始化：</h3><p class="line">jeepay支付平台已初始化微信、支付宝、云闪付常用支付方式，详见： [ <strong>支付配置 / 支付方式</strong> ] 功能列表。</p><p class="line">若对接的接口需要支持其他支付方式， 比如需要支持工行APP支付，则起名为：<code>ICBC_APP</code> 。然后对ICBC_APP进行初始化操作， 支持DML插入和页面操作两种方式。</p><p class="line">方式a&gt;. 执行sql请插入<code>t_pay_way</code>表。</p><p class="line">方式b&gt;. 页面操作如图：  <img src="./通道对接 - Powered by MinDoc_files/cahnnel_1.png" title="null" alt="" layer-index="0"></p><p class="line">注意： <code>way_code</code>字段为大写。  </p><h3 id="9lj15j" class="markdown-heading"><a name="9lj15j" class="reference-link"></a><span class="header-link octicon octicon-link"></span>1.4 &gt; 支付接口初始化：</h3><p class="line">支付接口是对上游接口的定义内容， 包括接口代码， 名称， 是否支付普通商户， 是否支持服务商模式，支持的支付方式以及服务商、普通商户的配置参数定义等设置项。</p><p class="line">支持DML插入和页面操作两种方式。</p><p class="line">方式a&gt;. 执行sql请插入<code>t_pay_interface_define</code>表。</p><p class="line">方式b&gt;. 页面操作如图：  <img src="./通道对接 - Powered by MinDoc_files/cahnnel_2.png" title="null" alt="" layer-index="1"></p><p class="line">注意： </p><ol>
<li><p class="line"><code>if_code</code>字段为小写。</p>
</li><li><p class="line"><code>isv_params</code> <code>isvsub_mch_params</code> <code>normal_mch_params</code> 三个字段为动态配置项，需存入JSONArray数组。规则如下：</p>
</li></ol><pre class="hljs cpp"><code>    <span class="hljs-comment"><span class="hljs-comment">//文本类型示例：</span></span>
    {
        name: <span class="hljs-string"><span class="hljs-string">"appId"</span></span>,  <span class="hljs-comment"><span class="hljs-comment">//定义取值key</span></span>
        desc: <span class="hljs-string"><span class="hljs-string">"应用ID"</span></span>,  <span class="hljs-comment"><span class="hljs-comment">//描述信息</span></span>
        type: <span class="hljs-string"><span class="hljs-string">"text"</span></span>,   <span class="hljs-comment"><span class="hljs-comment">//text 表示文本类型</span></span>
        verify: <span class="hljs-string"><span class="hljs-string">"required"</span></span> <span class="hljs-comment"><span class="hljs-comment">//是否必填：   required表示必填</span></span>
    }  

    <span class="hljs-comment"><span class="hljs-comment">//多行文本类型示例：</span></span>
    {
        name: <span class="hljs-string"><span class="hljs-string">"privateKey"</span></span>,  <span class="hljs-comment"><span class="hljs-comment">//定义取值key</span></span>
        desc: <span class="hljs-string"><span class="hljs-string">"私钥"</span></span>,  <span class="hljs-comment"><span class="hljs-comment">//描述信息</span></span>
        type: <span class="hljs-string"><span class="hljs-string">"textarea"</span></span>,   <span class="hljs-comment"><span class="hljs-comment">//textarea 表示多行文本类型</span></span>
        verify: <span class="hljs-string"><span class="hljs-string">"required"</span></span> <span class="hljs-comment"><span class="hljs-comment">//是否必填：   required表示必填</span></span>
    } 

    <span class="hljs-comment"><span class="hljs-comment">//单选按钮类型示例：</span></span>
    {
        name: <span class="hljs-string"><span class="hljs-string">"sandbox"</span></span>,  <span class="hljs-comment"><span class="hljs-comment">//定义取值key</span></span>
        desc: <span class="hljs-string"><span class="hljs-string">"环境配置"</span></span>, <span class="hljs-comment"><span class="hljs-comment">//描述信息</span></span>
        type: <span class="hljs-string"><span class="hljs-string">"radio"</span></span>, <span class="hljs-comment"><span class="hljs-comment">//radio表示为单选按钮</span></span>
        values: <span class="hljs-string"><span class="hljs-string">"1,0"</span></span>,  <span class="hljs-comment"><span class="hljs-comment">//选中的值， 以英文逗号分隔 （values只有radio生效）</span></span>
        titles: <span class="hljs-string"><span class="hljs-string">"沙箱环境,生产环境"</span></span>, <span class="hljs-comment"><span class="hljs-comment">//显示标题， 以英文逗号分隔 （titles只有radio生效）</span></span>
        verify: <span class="hljs-string"><span class="hljs-string">"required"</span></span> <span class="hljs-comment"><span class="hljs-comment">//是否必填 </span></span>
    } 

    <span class="hljs-comment"><span class="hljs-comment">//文件类型示例：</span></span>
    {
        name: <span class="hljs-string"><span class="hljs-string">"alipayRootCert"</span></span>,  <span class="hljs-comment"><span class="hljs-comment">//定义取值key</span></span>
        desc: <span class="hljs-string"><span class="hljs-string">"支付宝根证书（.crt格式）"</span></span>,  <span class="hljs-comment"><span class="hljs-comment">//描述信息</span></span>
        type: <span class="hljs-string"><span class="hljs-string">"file"</span></span>, <span class="hljs-comment"><span class="hljs-comment">//file表示上传文件类型</span></span>
        verify: <span class="hljs-string"><span class="hljs-string">"required"</span></span> <span class="hljs-comment"><span class="hljs-comment">//是否必填：   required表示必填</span></span>
    }</code></pre><h2 id="clcq1g" class="markdown-heading"><a name="clcq1g" class="reference-link"></a><span class="header-link octicon octicon-link"></span>二、 接口编码：</h2><h3 id="9uzume" class="markdown-heading"><a name="9uzume" class="reference-link"></a><span class="header-link octicon octicon-link"></span>2.1 &gt; 添加支付接口常量：</h3><p class="line">在常量类（com.jeequan.jeepay.core.constants.CS）<br><code>IF_CODE</code> 和 <code>PAY_WAY_CODE</code> 接口中定义好待添加的支付接口和支付方式。<br><img src="./通道对接 - Powered by MinDoc_files/cahnnel_3.png" title="null" alt="" layer-index="2"></p><h3 id="74lzg1" class="markdown-heading"><a name="74lzg1" class="reference-link"></a><span class="header-link octicon octicon-link"></span>2.2 &gt; 添加支付接口参数配置model：</h3><p class="line">按照第一步1.4中的配置约定信息，将参数定义好java bean<br>并统一放置在：  <code>com.jeequan.jeepay.core.model.params.对接接口代码</code> （core项目），定义bean 使得支付通道对接时更加方便。</p><p class="line"><img src="./通道对接 - Powered by MinDoc_files/cahnnel_4.png" title="null" alt="" layer-index="3"></p><p class="line">需注意：<br>定义的参数bean 需要根据 服务商 / 普通商户类型继承不同的抽象类。</p><p class="line">以<code>icbcpay</code> 为例：</p><p class="line">a. 支持服务商模式:<br>服务商配置参数： 类起名 <code>IcbcpayIsvParams</code> 继承<code>IsvParams</code></p><p class="line">特约商户配置参数： 类起名 <code>IcbcpayIsvsubMchParams</code> 继承<code>IsvsubMchParams</code></p><p class="line">b. 普通商户模式：<br>普通商户配置参数： 类起名 <code>IcbcpayNormalMchParams</code> 继承<code>NormalMchParams</code>   </p><p class="line">同时需要在 <code>IsvParams</code> <code>IsvsubMchParams</code> <code>NormalMchParams</code> 中修改对应的工厂函数实现。 <strong>关键</strong>！！</p><h3 id="gia6pl" class="markdown-heading"><a name="gia6pl" class="reference-link"></a><span class="header-link octicon octicon-link"></span>2.3 &gt; 添加支付方式的RQ和RS (如果有)</h3><p class="line">jeepay支付平台所有的API请求和响应，全部有model对应，并且支持hibernate validator校验 通用校验。<br>如果有新增的支付方式， 需要在 <code>com.jeequan.jeepay.pay.rqrs.payorder.payway</code> 中进行定义。 </p><p class="line"><img src="./通道对接 - Powered by MinDoc_files/cahnnel_5.png" title="null" alt="" layer-index="4"></p><p class="line">以<code>ICBC_APP</code>为例:</p><p class="line">a. 新建 IcbcAppOrderRQ 继承 <code>UnifiedOrderRQ</code>。</p><pre class="hljs"><code>构造函数中将wayCode传入为 ICBC_APP 支付方式。  支持自定义字段，下单时可根据该支付方式进行传参。  </code></pre><p class="line"><strong>新建RQ后需要同步在： com.jeequan.jeepay.pay.rqrs.payorder.UnifiedOrderRQ#buildBizRQ 函数中完成RQ的构造工作。<br>用于在不同的接口传入不同的业务RQ。</strong>   <strong>重要！！！</strong></p><p class="line"> hibernate validator 的使用请参考: <a href="https://docs.jboss.org/hibernate/stable/validator/reference/en-US/html_single/#validator-gettingstarted-createproject" target="_blank">https://docs.jboss.org/hibernate/stable/validator/reference/en-US/html_single/#validator-gettingstarted-createproject</a></p><p class="line">示例<img src="./通道对接 - Powered by MinDoc_files/cahnnel_6.png" title="null" alt="" layer-index="5"></p><p class="line">b. 新建 IcbcAppOrderRS 继承 <code>UnifiedOrderRS</code></p><pre class="hljs"><code>覆写： buildPayDataType 和 buildPayData 函数， 用于统一下单接口返回的payData数据。 
同时支持自定义接口响应参数（仅单独支付方式接口时可用）。</code></pre><p class="line">示例<img src="./通道对接 - Powered by MinDoc_files/cahnnel_7.png" title="null" alt="" layer-index="6"></p><h3 id="cled8u" class="markdown-heading"><a name="cled8u" class="reference-link"></a><span class="header-link octicon octicon-link"></span>2.4 &gt; 通道的对接工作</h3><p class="line">jeepay支付平台在 <code>com.jeequan.jeepay.pay.channel</code> 包下定义好对应的接口， 根据不同业务实现不同的接口即可。</p><p class="line"><img src="./通道对接 - Powered by MinDoc_files/cahnnel_8.png" title="null" alt="" layer-index="7"></p><p class="line">说明： </p><p class="line"><code>IChannelUserService</code> ： 获取渠道用户ID的接口定义<br><img src="./通道对接 - Powered by MinDoc_files/cahnnel_9.png" title="null" alt="" layer-index="8"></p><p class="line"><code>IPaymentService</code> ： 调起渠道侧下单支付接口定义<br><img src="./通道对接 - Powered by MinDoc_files/cahnnel_10.png" title="null" alt="" layer-index="9"></p><p class="line"><code>IPayNotifyService</code> ： 渠道回调通知解析数据定义</p><pre class="hljs cs"><code class="language-java"><span class="hljs-keyword"><span class="hljs-keyword">public</span></span> <span class="hljs-keyword"><span class="hljs-keyword">interface</span></span> <span class="hljs-title"><span class="hljs-title">IChannelNoticeService</span></span> {

    <span class="hljs-comment"><span class="hljs-comment">/** 通知类型 **/</span></span>
    <span class="hljs-keyword"><span class="hljs-keyword">enum</span></span> NoticeTypeEnum {
        DO_RETURN, <span class="hljs-comment"><span class="hljs-comment">//同步跳转</span></span>
        DO_NOTIFY <span class="hljs-comment"><span class="hljs-comment">//异步回调</span></span>
    }

    <span class="hljs-comment"><span class="hljs-comment">/* 获取到接口code **/</span></span>
    <span class="hljs-function"><span class="hljs-function">String </span><span class="hljs-title"><span class="hljs-function"><span class="hljs-title">getIfCode</span></span></span><span class="hljs-function">(</span><span class="hljs-params"></span><span class="hljs-function"><span class="hljs-params"></span>)</span></span>;

    <span class="hljs-comment"><span class="hljs-comment">/** 解析参数： 订单号 和 请求参数
     *  异常需要自行捕捉，并返回null , 表示已响应数据。
     * **/</span></span>
    <span class="hljs-function"><span class="hljs-function">MutablePair&lt;String, Object&gt; </span><span class="hljs-title"><span class="hljs-function"><span class="hljs-title">parseParams</span></span></span><span class="hljs-function">(</span><span class="hljs-params"><span class="hljs-function"><span class="hljs-params">HttpServletRequest request, String urlOrderId, NoticeTypeEnum noticeTypeEnum</span></span></span><span class="hljs-function">)</span></span>;

    <span class="hljs-comment"><span class="hljs-comment">/** 返回需要更新的订单状态 和响应数据 **/</span></span>
    <span class="hljs-function"><span class="hljs-function">ChannelRetMsg </span><span class="hljs-title"><span class="hljs-function"><span class="hljs-title">doNotice</span></span></span><span class="hljs-function">(</span><span class="hljs-params"><span class="hljs-function"><span class="hljs-params">HttpServletRequest request,
                           Object </span></span><span class="hljs-keyword"><span class="hljs-function"><span class="hljs-params"><span class="hljs-keyword">params</span></span></span></span><span class="hljs-function"><span class="hljs-params">, PayOrder payOrder, MchConfigContext mchConfigContext, NoticeTypeEnum noticeTypeEnum</span></span></span><span class="hljs-function">)</span></span>;

    <span class="hljs-comment"><span class="hljs-comment">/** 数据库订单 状态更新异常 (仅异步通知使用) **/</span></span>
    <span class="hljs-function"><span class="hljs-function">ResponseEntity </span><span class="hljs-title"><span class="hljs-function"><span class="hljs-title">doNotifyOrderStateUpdateFail</span></span></span><span class="hljs-function">(</span><span class="hljs-params"><span class="hljs-function"><span class="hljs-params">HttpServletRequest request</span></span></span><span class="hljs-function">)</span></span>;

    <span class="hljs-comment"><span class="hljs-comment">/** 数据库订单数据不存在  (仅异步通知使用) **/</span></span>
    <span class="hljs-function"><span class="hljs-function">ResponseEntity </span><span class="hljs-title"><span class="hljs-function"><span class="hljs-title">doNotifyOrderNotExists</span></span></span><span class="hljs-function">(</span><span class="hljs-params"><span class="hljs-function"><span class="hljs-params">HttpServletRequest request</span></span></span><span class="hljs-function">)</span></span>;

}</code></pre><p class="line"><img src="./通道对接 - Powered by MinDoc_files/cahnnel_11.png" title="null" alt="" layer-index="10"></p><p class="line"><code>IPayOrderQueryService</code> ： 查单（渠道侧）接口定义<br><img src="./通道对接 - Powered by MinDoc_files/cahnnel_12.png" title="null" alt="" layer-index="11"></p><p class="line">已<code>icbcpay</code>为例<br>首先在<code>com.jeequan.jeepay.pay.channel</code> 下新建 icbcpay 包:  <code>com.jeequan.jeepay.pay.channel.icbcpay</code> </p><h4 id="16zirm" class="markdown-heading"><a name="16zirm" class="reference-link"></a><span class="header-link octicon octicon-link"></span>a. 支付接口类：</h4><p class="line">新建 <code>IcbcpayPaymentService</code> 继承 <code>AbstractPaymentService</code></p><p class="line">覆写<code>getIfCode()</code>函数： 并返回 icbcpay。</p><p class="line">覆写<code>isSupport()</code>函数： 对传入的wayCode进行判断是否支持。 支持返回true, 不支持返回false。</p><p class="line">覆写<code>preCheck()</code>函数： rq 和 payOrder信息进行预先校验， 如条码是否可用等。  返回错误信息，将进行api提示， 返回null表示验证通过，无错误。将继续执行。 </p><p class="line">覆写 <code>pay()</code> 函数： 根据rq 和 payOrder信息调起支付接口， 并返回包装响应数据。  如果payway比较多，建议在包下新建<code>payway</code>, 然后调用： <code>PaywayUtil.getRealPaywayService(this, payOrder.getWayCode()).pay(rq, payOrder, mchConfigContext);</code><br>对支付接口下的支付方式再次进行解耦。 可参考现有项目下的 alipay。 </p><p class="line">提示： </p><ol>
<li><p class="line">所有接口传入的 <code>UnifiedOrderRQ rq</code> 均可根据wayCode 强转为业务RQ, 用于读取到不同支付方式的传入信息；<br>比如： 支付宝bar支付： <code>AliBarOrderRQ bizRQ = (AliBarOrderRQ) rq;</code></p>
</li><li><p class="line">mchConfigContext 参数是当前支付商户的上下文信息， 包含商户的配置信息，商户服务商的配置信息等。</p>
</li><li><p class="line">判断创建订单的商户是服务商特约商户还是普通商户： <code>mchConfigContext.isIsvsubMch()</code></p>
</li><li><p class="line">获取服务商和特约商户配置参数 （定义参考2.2）：</p>
<p class="line"> 已支付宝为例</p>
<hr>
<p class="line"> isv参数： <code>AlipayIsvParams isvParams = mchConfigContext.getIsvConfigContext().getIsvParamsByIfCode(getIfCode(), AlipayIsvParams.class);</code></p>
<p class="line"> 特约商户参数： <code>AlipayIsvsubMchParams isvsubMchParams = mchConfigContext.getIsvsubMchParamsByIfCode(getIfCode(), AlipayIsvsubMchParams.class);</code></p>
<hr>
<p class="line"> 普通商户参数： <code>AlipayNormalMchParams normalMchParams = mchConfigContext.getNormalMchParamsByIfCode(getIfCode(), AlipayNormalMchParams.class);</code></p>
<hr>
</li><li><p class="line">获取回调接口地址： <code>getNotifyUrl()</code></p>
</li><li><p class="line">获取同步跳转地址： <code>getReturnUrl()</code></p>
</li><li><p class="line">获取上传的证书文件： <code>channelCertConfigKitBean.getCertFilePath(isvParams.getIsvPrivateCertFile())</code></p>
</li><li><p class="line">构建支付响应数据：</p>
<pre class="hljs cpp"><code>  <span class="hljs-comment"><span class="hljs-comment">// 构造函数响应数据</span></span>
 AliAppOrderRS res = ApiResBuilder.buildSuccess(AliAppOrderRS.<span class="hljs-keyword"><span class="hljs-keyword">class</span></span>);
 ChannelRetMsg channelRetMsg = <span class="hljs-keyword"><span class="hljs-keyword">new</span></span> ChannelRetMsg();
 res.setChannelRetMsg(channelRetMsg);

 <span class="hljs-comment"><span class="hljs-comment">//放置 响应数据</span></span>
 channelRetMsg.setChannelAttach(payData);
 channelRetMsg.setChannelState(ChannelRetMsg.ChannelState.WAITING);
 res.setPayData(payData);</code></pre></li></ol><p class="line">ChannelRetMsg 为渠道侧的响应结果， 需要根据实际情况进行赋值操作：<br><img src="./通道对接 - Powered by MinDoc_files/cahnnel_13.png" title="null" alt="" layer-index="12"></p><p class="line">订单状态 根据 上游渠道状态进行变更  如下： </p><pre class="hljs sql"><code>明确成功  ==》 订单改为成功

明确失败 ==》 订单改为失败

等待  ==》  支付中 明确需要补单或者等待回调接口

未知 ==》  支付中   可能需要补单

接口报错   ==》 支付中  可能需要补单

系统异常 ==》  订单为： 订单生成状态。 <span class="hljs-comment"><span class="hljs-comment">--》 订单超时自动关闭。 </span></span></code></pre><h4 id="caoq5m" class="markdown-heading"><a name="caoq5m" class="reference-link"></a><span class="header-link octicon octicon-link"></span>b. 回调接口类：</h4><p class="line">新建 <code>IcbcpayChannelNoticeService</code> 继承 <code>AbstractChannelNoticeService</code></p><p class="line">覆写<code>getIfCode()</code>函数： 并返回 icbcpay。</p><p class="line">覆写<code>parseParams()</code>函数： 用于处理渠道侧发送报文的解析， 并返回本支付系统订单号和自定义数据， 数据将向下传递。  </p><p class="line">覆写<code>doNotice()</code>函数： 用于验签和处理响应结果。  </p><p class="line">提示： </p><ol>
<li><p class="line">parseParams函数返回类型MutablePair 为元组类型。  返回结果为： MutablePair&lt;解析到的订单号，自定义数据&gt;。 </p>
</li><li><p class="line">doNotice函数 需返回ChannelRetMsg 对象， 支持设置ChannelRetMsg中的 responseEntity ， 将原样响应给上游。<br>获取支付参数和文件请参考支付接口。<br>ChannelRetMsg 信息尽量设置详细， 如上游订单号， 用户ID标识等。  订单状态为必须信息。 将更新返回结果更新订单状态。 </p>
</li></ol><h4 id="10p3ou" class="markdown-heading"><a name="10p3ou" class="reference-link"></a><span class="header-link octicon octicon-link"></span>c. 查单类：</h4><p class="line">新建 <code>IcbcpayPayOrderQueryService</code> 实现 <code>IPayOrderQueryService</code></p><p class="line">覆写<code>getIfCode()</code>函数： 并返回 icbcpay。</p><p class="line">覆写<code>query()</code>函数： 请求渠道侧接口，并返回上游订单状态。 </p><p class="line">提示： query()函数需返回ChannelRetMsg对象, 参考支付接口或回调文档。  </p><hr><p class="line"><strong>以上就完成了接口的对接工作， 给商户的支付通道配置好新对接的接口和费率进行测试工作吧。</strong></p><div class="wiki-bottom">文档更新时间: 2021-11-08 12:30 &nbsp;&nbsp;作者：大森林</div></div>
































































</article></div>
                    
                    <div class="jump-top">
                        <a href="javascript:;" class="view-backtop"><i class="fa fa-arrow-up" aria-hidden="true"></i></a>
                    </div>
                </div>

            </div>
        </div>
        <div class="manual-progress"><b class="progress-bar"></b></div>
    <div id="manual-vsplitbar" unselectable="on" style="z-index: 301; position: absolute; user-select: none; cursor: col-resize; left: 275px; height: 100%; display: block; width: 3px;">                        <a href="javascript:void(0)" accesskey="" tabindex="0" title="vsplitbar"></a>                    </div></article>
    <div class="manual-mask"></div>
</div>


<div class="modal fade" id="downloadBookModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
    <div class="modal-dialog">
        <div class="modal-content">
            <div class="modal-header">
                <button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">×</span><span class="sr-only">Close</span></button>
                <h4 class="modal-title" id="myModalLabel">项目分享</h4>
            </div>
            <div class="modal-body">
                <div class="row">
                    <div class="col-sm-12 text-center" style="padding-bottom: 15px;">
                        <img src="./通道对接 - Powered by MinDoc_files/jeepay.png" alt="扫一扫手机阅读">
                    </div>
                </div>
                <div class="form-group">
                    <label for="password" class="col-sm-2 control-label">项目地址</label>
                    <div class="col-sm-10">
                        <input type="text" value="https://docs.jeequan.com/docs/jeepay" class="form-control" onmouseover="this.select()" id="projectUrl" title="项目地址">
                    </div>
                    <div class="clearfix"></div>
                </div>
            </div>
            <div class="modal-footer">
                <button type="button" class="btn btn-default" data-dismiss="modal">关闭</button>
            </div>
        </div>
    </div>
</div>

<script src="./通道对接 - Powered by MinDoc_files/jquery.min.js.下载"></script>
<script src="./通道对接 - Powered by MinDoc_files/bootstrap.min.js.下载"></script>
<script src="./通道对接 - Powered by MinDoc_files/jquery.form.js.下载" type="text/javascript"></script>
<script src="./通道对接 - Powered by MinDoc_files/layer.js.下载" type="text/javascript"></script>
<script src="./通道对接 - Powered by MinDoc_files/jstree.min.js.下载" type="text/javascript"></script>
<script src="./通道对接 - Powered by MinDoc_files/nprogress.js.下载" type="text/javascript"></script>
<script src="./通道对接 - Powered by MinDoc_files/highlight.js.下载" type="text/javascript"></script>
<script src="./通道对接 - Powered by MinDoc_files/jquery.highlight.js.下载" type="text/javascript"></script>
<script src="./通道对接 - Powered by MinDoc_files/kancloud.js.下载" type="text/javascript"></script>
<script src="./通道对接 - Powered by MinDoc_files/splitbar.js.下载" type="text/javascript"></script>
<script type="text/javascript">
$(function () {
    $("#searchList").on("click","a",function () {
        var id = $(this).attr("data-id");
        var url = "https:\/\/docs.jeequan.com\/docs\/jeepay\//" + id;
        $(this).parent("li").siblings().find("a").removeClass("active");
        $(this).addClass("active");
        loadDocument(url,id,function (body) {
            return $(body).highlight(window.keyword);
        });
    });
});
</script>


<div id="screenity-ui"><div class="screenity-shadow-dom"><div><div class="screenity-scrollbar"></div><div class="screenity-scrollbar"></div></div><style type="text/css">
			#screenity-ui, #screenity-ui div {
				background-color: unset;
				padding: unset;
				width: unset;
				box-shadow: unset;
				display: unset;
				margin: unset;
				border-radius: unset;
			}
			.screenity-outline {
				position: absolute;
				z-index: 99999999999;
				border: 2px solid #3080F8;
				outline-offset: -2px;
				pointer-events: none;
				border-radius: 5px!important;
			}
		.screenity-blur {
			filter: blur(10px)!important;
		}
			.screenity-shadow-dom * {
				transition: unset;
			}
			.screenity-shadow-dom .TooltipContent {
  border-radius: 30px!important;
	background-color: #29292F!important;
  padding: 10px 15px!important;
  font-size: 12px;
	margin-bottom: 10px!important;
	bottom: 100px;
  line-height: 1;
	font-family: 'Satoshi-Medium', sans-serif;
	z-index: 99999999!important;
  color: #FFF;
  box-shadow: hsl(206 22% 7% / 35%) 0px 10px 38px -10px, hsl(206 22% 7% / 20%) 0px 10px 20px -15px!important;
  user-select: none;
	transition: opacity 0.3 ease-in-out;
  will-change: transform, opacity;
	animation-duration: 400ms;
  animation-timing-function: cubic-bezier(0.16, 1, 0.3, 1);
  will-change: transform, opacity;
}

.screenity-shadow-dom .hide-tooltip {
	display: none!important;
}

.screenity-shadow-dom .tooltip-tall {
	margin-bottom: 20px;
}

.screenity-shadow-dom .tooltip-small {
	margin-bottom: 5px;
}

.screenity-shadow-dom .TooltipContent[data-state='delayed-open'][data-side='top'] {
	animation-name: slideDownAndFade;
}
.screenity-shadow-dom .TooltipContent[data-state='delayed-open'][data-side='right'] {
  animation-name: slideLeftAndFade;
}
.screenity-shadow-dom.TooltipContent[data-state='delayed-open'][data-side='bottom'] {
  animation-name: slideUpAndFade;
}
.screenity-shadow-dom.TooltipContent[data-state='delayed-open'][data-side='left'] {
  animation-name: slideRightAndFade;
}

@keyframes slideUpAndFade {
  from {
    opacity: 0;
    transform: translateY(2px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}

@keyframes slideRightAndFade {
  from {
    opacity: 0;
    transform: translateX(-2px);
  }
  to {
    opacity: 1;
    transform: translateX(0);
  }
}

@keyframes slideDownAndFade {
  from {
    opacity: 0;
    transform: translateY(-2px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}

@keyframes slideLeftAndFade {
  from {
    opacity: 0;
    transform: translateX(2px);
  }
  to {
    opacity: 1;
    transform: translateX(0);
  }
}

#screenity-ui [data-radix-popper-content-wrapper] { z-index: 999999999999!important; } 

.screenity-shadow-dom .CanvasContainer {
	position: fixed;
	pointer-events: all!important;
	top: 0px!important;
	left: 0px!important;
	z-index: 99999999999!important;
}
.screenity-shadow-dom .canvas {
	position: fixed;
	top: 0px!important;
	left: 0px!important;
	z-index: 99999999999!important;
	background: transparent!important;
}
.screenity-shadow-dom .canvas-container {
	top: 0px!important;
	left: 0px!important;
	z-index: 99999999999;
	position: fixed!important;
	background: transparent!important;
}

.ScreenityDropdownMenuContent {
	z-index: 99999999999!important;
  min-width: 200px;
  background-color: white;
  margin-top: 4px;
  margin-right: 8px;
  padding-top: 12px;
  padding-bottom: 12px;
  border-radius: 15px;
  z-index: 99999;
  font-family: 'Satoshi-Medium', sans-serif;
  color: #29292F;
  box-shadow: 0px 10px 38px -10px rgba(22, 23, 24, 0.35),
    0px 10px 20px -15px rgba(22, 23, 24, 0.2);
  animation-duration: 400ms;
  animation-timing-function: cubic-bezier(0.16, 1, 0.3, 1);
  will-change: transform, opacity;
}
.ScreenityDropdownMenuContent[data-side="top"] {
  animation-name: slideDownAndFade;
}
.ScreenityDropdownMenuContent[data-side="right"] {
  animation-name: slideLeftAndFade;
}
.ScreenityDropdownMenuContent[data-side="bottom"] {
  animation-name: slideUpAndFade;
}
.ScreenityDropdownMenuContent[data-side="left"] {
  animation-name: slideRightAndFade;
}
.ScreenityItemIndicator {
  position: absolute;
  right: 12px; 
  width: 18px;
  height: 18px;
  background: #3080F8;
  border-radius: 50%;
  display: inline-flex;
  align-items: center;
  justify-content: center;
}
.ScreenityDropdownMenuItem,
.ScreenityDropdownMenuRadioItem {
  font-size: 14px;
  line-height: 1;
  display: flex;
  align-items: center;
  height: 40px;
  padding: 0 5px;
  position: relative;
  padding-left: 22px;
  padding-right: 22px;
  user-select: none;
  outline: none;
}
.ScreenityDropdownMenuItem:hover {
    background-color: #F6F7FB !important;
    cursor: pointer;
}
.ScreenityDropdownMenuItem[data-disabled] {
  color: #6E7684; !important;
  cursor: not-allowed;
  background-color: #F6F7FB !important;
}



@keyframes slideUpAndFade {
  from {
    opacity: 0;
    transform: translateY(2px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}

@keyframes slideRightAndFade {
  from {
    opacity: 0;
    transform: translateX(-2px);
  }
  to {
    opacity: 1;
    transform: translateX(0);
  }
}

@keyframes slideDownAndFade {
  from {
    opacity: 0;
    transform: translateY(-2px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}

@keyframes slideLeftAndFade {
  from {
    opacity: 0;
    transform: translateX(2px);
  }
  to {
    opacity: 1;
    transform: translateX(0);
  }
}

</style></div></div><div class="layui-layer-move"></div></body></html>